"""
项目启动相关配置
数据库配置
redis配置,为后续登陆做铺垫
session配置
CSRFProtect配置，为了对['post' 'put' 'delete' 'dispatch'] 请求保护
日志文件配置
迁移文件配置

"""
import random
from datetime import datetime, timedelta

from flask import current_app, jsonify
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from info import create_app, db, models  # 需要知道有modules这个文件即可

# 传入标记，加入对应的配置信息
from info.models import User
from info.utils.response_code import RET

app = create_app('develop')

# 实例化Manager对象
manager = Manager(app)

# 关联app,db
Migrate(app, db)

# 添加操作命令　
manager.add_command('db', MigrateCommand)


# 创建管理员方法
# 加上@manager.option表示可以通过命令行的方边上法调用
# 创建方法　python manger.py 函数名 -u 用户名　-p 密码
# python manger.py create_superuser -u admin -p 111111
# 参数１：表示参数名称，　参数２：参数名称描述，　参数３：表示传递到方法的形式参数中
@manager.option('-p', '--password', dest='password')
@manager.option('-u', '--username', dest='username')
def create_superuser(username, password):
    # 　创建管理员对象
    admin = User()
    #   设置管理员对象属性
    admin.nick_name = username
    admin.mobile = username
    admin.password = password
    admin.is_admin = True

    #   保存到数据库
    try:
        db.session.add(admin)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)

        db.session.rollback()

        return '创建失败'

    return '创建成功'


#  添加测试用户
@manager.option('-t', '--test', dest='test')
def add_test_user(test):
    #  定义用户容器
    user_list = []
    #  创建1000个用户
    for i in range(0, 1000):
        user = User()
        user.nick_name = '老余%d' % i
        user.mobile = '137%08d' % i
        user.password_hash = 'pbkdf2:sha256:50000$Mwmsjhgb$875af044502a17e897eb80908bb0f1d8db0e4171518411963ae5160f867c8ba5'

        #  设置用户的近31天登陆时间
        user.last_login = datetime.now() - timedelta(seconds=random.randint(0, 3600 * 24 * 31))

        #  添加到容器
        user_list.append(user)

    # 添加到数据库
    try:
        db.session.add_all(user_list)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return '添加失败'
    return '添加成功'


if __name__ == '__main__':
    manager.run()
